package com.example.demo.service;

import com.example.demo.exception.file.InvalidNewpathException;
import com.example.demo.exception.file.InvalidPathException;
import com.jcraft.jsch.SftpException;
import com.lowagie.text.DocumentException;
import org.springframework.web.multipart.MultipartFile;

import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.util.ArrayList;
import java.util.Map;

public interface FileService {

    /**
     * 修改文件的上次更新时间
     * @param path 文件完整路径
     * @throws InvalidPathException 文件路径不存在异常
     */
    void updateFileLastTime(String path) throws InvalidPathException;
    /**
     * 上传文件/图片
     * @param path 文件/图片的路径（不包括文件本身的名字）
     * @param file 文件
     * @throws Exception 异常
     */
    void uploadFile(String path, MultipartFile file) throws Exception;

    /**
     * 文件加星
     * @param path 文件路径
     */
    void fileAddStar(String path) throws InvalidPathException;

    /**
     * 文件取消加星
     * @param path 文件路径
     * @throws InvalidPathException 文件路径不存在异常
     */
    void fileCancelStar(String path) throws InvalidPathException;

    /**
     * 文件置顶
     * @param path 文件完整路径
     * @throws InvalidPathException 文件路径不存在异常
     */
    void fileAddTop(String path) throws InvalidPathException;

    /**
     * 文件取消置顶
     * @param path 文件完整路径
     * @throws InvalidPathException 文件路径不存在异常
     */
    void fileCancelTop(String path) throws InvalidPathException;

    /**
     * 获取文件信息
     * @param path 文件完整路径
     * @return 文件
     */
    Map<String, Object> getFileInfo(String path) throws InvalidPathException;

    /**
     * 重命名文件/夹
     * @param oldPath 原文件/夹路径
     * @param newPath 新文件/夹路径
     * @throws InvalidPathException 原文件路径异常
     * @throws SftpException SFTP异常
     */
    void renameFile(String oldPath, String newPath) throws InvalidPathException, SftpException;

    /**
     * 粘贴文件/夹
     * @param oldPath 原文件路径
     * @param newPath 粘贴之后的文件路径
     * @throws InvalidPathException 原文件路径不存在异常
     */
    void pasteFile(String oldPath,String newPath) throws InvalidPathException, InvalidNewpathException;

    /**
     * 保存笔记
     * @param path 笔记的父级目录
     * @param title 笔记的标题
     * @param file 笔记文字文件
     * @param pics 笔记图片文件
     * @throws Exception 异常
     */
    void saveFileWithWord(String path, String title, MultipartFile file, ArrayList<MultipartFile> pics,String summary) throws Exception;

    /**
     * 获取文件可访问的资源路径
     * @param path 前端获取的路径
     * @return 拼接后的完整路径
     * @throws InvalidPathException 路径不存在异常
     */
    String getFilePath(String path) throws InvalidPathException;
    /**
     * 导入word文件，支持docx和doc格式
     * @param path 文件路径
     * @param file word文件
     * @throws Exception 异常处理
     */
    void importWord(String path,MultipartFile file) throws Exception;
    /**
     * 导出word文件，导出文件为doc格式
     * @param path 文件路径
     * @return 导出doc文件的路径
     * @throws SftpException sft异常
     * @throws IOException io异常
     * @throws DocumentException document异常
     */
    String exportWord(String path) throws SftpException, IOException, DocumentException, InvalidPathException;

    String md2pdf(String path) throws FileNotFoundException, SftpException, UnsupportedEncodingException, InvalidPathException;

    void editFile(String path,String author,String origin) throws InvalidPathException;

}
